/**
 开发团队 :
 开发人员 : ZBB295
 开发时间 : 2022/8/14 13:48
 文件名称 : login.js
 开发工具 : WebStorm
 */

//实现登录功能

//导入用户集合构造函数 用解构方法
const {User} = require("../../model/user");
//导入密码加密模块
const bcryptjs = require("bcryptjs");

const login_handler =async (req, res)=>{
    //接收请求参数
    const {email,password} = req.body;
    //用户没有输入邮件地址
    if (email.trim().length == 0 || password.trim().length==0){
        return res.status(400).render('admin/error',{message:'邮件地址或者密码错误'});
    }

    //根据用户邮箱地址查询用户信息
    //如果查询到了用户信息user的变量是对象类型，对象中存储的是用户信息
    //如果没有查询到用户 user变量为空
    let user = await User.findOne({email:email});
    //查询到用户信息
    if (user){
        //将客户端传递过来的密码和用户信息中密码进行比对
        // 即可使用 bcrypt.compareSync(提交的密码，数据库中的密码) 方法验证密码是否正确
        // compareSync() 函数的返回值为布尔值，true 表示密码正确，false 表示密码错误
        const compareResult = bcryptjs.compareSync(password,user.password)
        if (compareResult){
            //登陆成功
            req.session.username = user.username;
            req.session.role =user.role;
            //登录成功后将信息挂载到app.locals对象下，这样在所有模版下都能拿到这个数据，
            // 其中req.app中的app就是在app.js中创建的app对象
            req.app.locals.userinfo = user;
            if (user.role == 'admin'){
                //成功后进行以页面跳转，用到express框架下的redirect方法
                res.redirect('/admin/user');
            }else {
                //重定向到博客首页
                res.redirect('/home/')
            }
            // res.send('登录成功');

        }else {
            //没有查询到用户
            res.status(400).render('admin/error',{message:'邮件地址或者密码错误'});
        }
    }else {
        // 没有查询到用户信息
        res.status(400).render('admin/error',{message:'邮件地址或者密码错误'});
    }

}

module.exports = login_handler;